/*
 *  字体类型管理
 */
#ifndef _VIEW_FONT_H
#define _VIEW_FONT_H

#include "image.h"
#include <stdint.h>
#include <stdbool.h>

/* tab时间隔空格数(每个空格约半个中文宽) */
#define VIEW_FONT_INTERVAL_TAB 4

typedef enum
{
    VFT_DEFAULT = 0, /* android默认中文字体 */
    VFT_ZK_LOGO      /* 站酷小logo体 */
} ViewFontType;

class ViewFont
{
public:
    /* 只初始化一个实例,全世界共用(单例模式) */
    static ViewFont* GetVF();

    /* 字体加载 */
    int32_t Load(ViewFontType font, const char* fontFile);
    /* 字体释放 */
    int32_t UnLoad();

    /* 计算字符串输出范围大小 */
    int32_t SizeOf(
        const char* utf8,  /* utf-8格式的文本内容 */
        ViewFontType font, /* 字体 */
        int32_t size,      /* 字体大小(宽高像素) */
        int32_t bold,      /* 加粗量 */
        int32_t spaceX,    /* 横向字符间隔(像素) */
        int32_t spaceY,    /* 纵向字符间隔(像素),该值大于0时启用自动换行 */
        int32_t lineLimit, /* 最大行宽(像素),为0时不限 */
        int32_t degree,    /* 逆时针旋转角度(-360~360度) */
        int32_t& retWidth, /* 返回宽高 */
        int32_t& retHeight);

    /* 输出点阵 */
    int32_t Print(
        const char* utf8,  /* utf-8格式的文本内容 */
        ViewFontType font, /* 字体 */
        int32_t size,      /* 字体大小(宽高像素) */
        int32_t bold,      /* 加粗量 */
        int32_t degree,    /* 逆时针旋转角度(-360~360度) */
        bool isGrayMap,    /* 是否使用灰度图 */
        ImageGrid& plane,  /* 绘制到plane */
        uint32_t color,    /* 填充颜色ARGB格式,示例0x80112233,33为B,22为G,11为R,80为A(越大越透明) */
        int32_t x,         /* 绘制到plane的x,y坐标处 */
        int32_t y,
        int32_t spaceX,    /* 横向间隔 */
        int32_t spaceY,    /* 行间隔 */
        bool autoEnter);   /* 碰到plane的横向边界时自动换行 */

    /* 输出点阵到文件描述符 */
    int32_t Printf(
        const char* utf8,  /* utf-8格式的文本内容 */
        ViewFontType font, /* 字体 */
        int32_t size,      /* 字体大小(宽高像素) */
        int32_t bold,      /* 加粗量 */
        int32_t degree,    /* 逆时针旋转角度(-360~360度) */
        bool isGrayMap,    /* 是否使用灰度图(cPrint将替换为0~9的字符) */
        FILE* fp,          /* 输出到文件描述符 */
        char cPrint,       /* 打印字符 */
        char cEmpty);      /* 空白字符 */

private:
    ViewFont();
    ~ViewFont();
    void* m_ftHandle;
};

#endif // _VIEW_FONT_H
